% coding: utf-8

\subsection{Segunda parte: service discovery.}
%service discovery
\begin{itemize}
\item \textit{Definir e implementar una estrategia para descubrir qu\'e servicio corresponde a un puerto abierto.}

\indent Para averiguar qu\'e servicio corresponde a un puerto abierto, en primera instancia lo que pensamos fue utilizar \textbf{nmap} ya que vimos que nos devolv\'ia el servicio. Para utilizarlo necesit\'abamos la ip para invocarlo. Este comando scannea los puertos para ver su estado, pero dado que lo que queremos averiguar es el servicio de un puerto que ya sabemos que est\'a abierto, nos result\'o procesamiento innecesario. Por este motivo, descartamos esta opci\'on y en su lugar utilizamos la funci\'on \textit{getservbyport} de \textit{socket} que devuelve el servicio dado un puerto.

\indent Este m\'etodo utiliza el archivo /etc/services para consultar cu\'al es el servicio (hicimos la prueba modificando el archivo, y la funci\'on devuelve el valor que figura en tal archivo modificado por nosotras).

\begin{Verbatim}[frame=single, label=C\'odigo, numbers=left]
from scapy.all import *
import socket

def service_discovery(puerto):
    return socket.getservbyport(puerto)
\end{Verbatim}

\item \textit{¿En qu\'e casos es efectiva?}

\indent Dado que este m\'etodo utiliza el archivo /etc/services, el resultado ser\'a confiable siempre ya que es el valor actual. Si en lugar de utilizar tal m\'etodo, hici\'eramos por ejemplo un diccionario de puerto$-$servicio sin actualizarlo nunca, correr\'iamos el riesgo de que dado un cambio en el archivo /etc/services, no se viera reflejado.

\end{itemize}

